% 生成包含信号和噪声的示例信号
t = linspace(0, 1, 1000);
signal = sin(2 * pi * 5 * t);  % 5 Hz正弦信号
noise = 0.5 * randn(size(t));  % 添加高斯噪声
noisy_signal = signal + noise;

% 使用移动平均滤波器平滑信号
window_size = 20;
smoothed_signal = movmean(noisy_signal, window_size);

% 构建信号矩阵
A = [t' ones(size(t'))];

% 添加噪声
A(:, 2) = smoothed_signal;

% QR分解
[Q, R] = qr(A, 0);

% 选择主成分
main_components = R(1:2, 1:2);

% 次要成分置零
R(:, 3:end) = 0;

% 重构信号
denoised_signal = Q * R';

% 绘制原始信号、带噪声的信号、平滑后的信号和降噪后的信号
figure;
plot(t, signal, 'LineWidth', 2, 'DisplayName', '原始信号');
hold on;
plot(t, noisy_signal, 'Color', [0.7, 0.7, 0.7], 'DisplayName', '带噪声的信号');
plot(t, smoothed_signal, 'LineWidth', 2, 'DisplayName', '平滑后的信号');
plot(t, denoised_signal(:, 2), '--', 'LineWidth', 2, 'DisplayName', '降噪后的信号');
hold off;
legend('Location', 'Best');
title('使用QR分解进行信号降噪');
xlabel('时间');
ylabel('幅度');
